package br.com.unirio.autocar.dados;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.TypedQuery;

import br.com.unirio.autocar.modelo.TipoTransacao;
import br.com.unirio.autocar.modelo.Transacao;

public class RepositorioDeTransacao
{
    RepositorioGenerico<Transacao> repositorioDeTransacoes;

    public RepositorioDeTransacao()
    {
	super();
	repositorioDeTransacoes = new RepositorioGenerico<Transacao>();
    }

    public void salvarTransacao(Transacao transacao)
    {
	repositorioDeTransacoes.salvar(transacao);
    }

    public Transacao obterTransacaoAPartirDeId(Long idTransacao)
    {
	Transacao transacao = repositorioDeTransacoes.obterPorId(Transacao.class, idTransacao);
	return transacao;
    }

    public void removerTransacao(Transacao transacao)
    {
	repositorioDeTransacoes.excluir(transacao);
    }

    public void alterarTransacao(Transacao Transacao)
    {
	repositorioDeTransacoes.alterar(Transacao);
    }

    public List<Transacao> obterTodos()
    {
	return this.repositorioDeTransacoes.obterTodos(Transacao.class);
    }

    public List<Transacao> obterTransacoesDeCompraDeAutomoveis()
    {

	TypedQuery<Transacao> query =
		this.repositorioDeTransacoes.getGerenciadorDeEntidade().createQuery(
			"FROM Transacao t WHERE t.tipoTransacao = :tipoTransacao",
			    Transacao.class);
	query.setParameter("tipoTransacao", TipoTransacao.COMPRA_AUTOMOVEL);

	List<Transacao> transacoesDeCompra = query.getResultList();
	return transacoesDeCompra;
    }

    public List<Transacao> obterTransacoesDeVendaDeAutomoveis()
    {

	TypedQuery<Transacao> query =
		this.repositorioDeTransacoes.getGerenciadorDeEntidade().createQuery(
			"FROM Transacao t WHERE t.tipoTransacao = :tipoTransacao",
			    Transacao.class);
	query.setParameter("tipoTransacao", TipoTransacao.VENDA_AUTOMOVEL);

	List<Transacao> transacoesDeCompra = query.getResultList();
	return transacoesDeCompra;

    }

    public List<Transacao> obterTransacoesDeCompraDeAcessorios()
    {

	return new ArrayList<Transacao>();
    }

    public List<Transacao> obterTransacoesDeVendaDeAcessorios()
    {

	return new ArrayList<Transacao>();
    }
}
